Source code for src.cmd.process

import sys, subprocess, time
from os.path import join
import cardsharp as cs
from util import *
from ..util import check_file, RUNDATETIME, get_state_name
from ..configuration import db_info, config

[docs]def process(cmd): '''Spawns a process subprocess for segments.''' args = cmd.args #get the segments to run _segments = [segment_run_map[seg] for seg in args.segments.split('|')] regions = cs.load(**{'source': db_info['stand']['name'], 'dataset': 'region', 'format': 'mysql', 'user': db_info['stand']['user'], 'pwd': db_info['stand']['pass'], 'load_as_null': ['',] } ) region = args.where if args.where else 'all' #validate options #validate include and exclude rules mutual exclusion if args.include_rules and args.exclude_rules: print 'Can not specify include and exclude rules. Please choose one or the other.' sys.exit() #validate rule dir check_file(args.rules.strip(), as_dir = True) opt = {'out_dir': check_file(args.out_dir.strip(), as_dir = True), 'meta_dir': check_file(args.metadata.strip(), as_dir = True), 'rules': '%s/process_rules' % args.rules.strip(), 'out_format': args.out_format.strip(), 'validate_rules': True, 'in_where':args.where, 'verbose': args.verbose, 'db_info': db_info['stand'], 'halt_on_err': False, 'limit': args.limit, 'phase_id':'2', 'include_rules': args.include_rules, 'exclude_rules': args.exclude_rules, } for segment in list(_segments): if segment in ('demographic'): #removed 'supervision' _log_dir = join(config.log_dir, 'set_%i' % config.current_set, 'process', segment, region, RUNDATETIME) _opt = opt.copy() _opt['segment'] = segment _opt['log_dir'] = create_log_dir(_log_dir) cmd.task_queue.put(_opt) _segments.remove(segment) cmd.start() #start the supervision and demographic workers for segment in _segments: if segment == 'supervision': continue #removed supervision from processing opt['segment'] = segment if not args.regions: _log_dir = join(config.log_dir, 'set_%i' % config.current_set, 'process', segment, region, RUNDATETIME) opt['log_dir'] = create_log_dir(_log_dir) _opt = opt.copy() #if where is not declared than run all states #if parallel specified run all states in parellel if not args.where and args.parallel: for row in regions: __opt = opt.copy() __opt['in_where'] = 'state=%s' % row['id'] cmd.task_queue.put(__opt) else: if args.regions: for region in args.regions: __opt = opt.copy() #log dir not created above, create it _log_dir = join(config.log_dir, 'set_%i' % config.current_set, 'process', segment, region, RUNDATETIME) __opt['log_dir'] = create_log_dir(_log_dir) __opt['in_where'] = 'state=%s' % get_state_name(region) cmd.task_queue.put(__opt) else: cmd.task_queue.put(_opt) cmd.start() #start the arrest and sentence workers cmd.task_queue.join() #wait for everything to finish cmd.flush() #flush the cmd logs